const express = require("express");
const { STS } = require('ali-oss');

const router = express.Router();

// 配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID。
const accessKeyId = process.env.OSS_ACCESS_KEY_ID || "LTAI5tQDHEmidb3rzvdbWnbn";
// 配置环境变量ALIBABA_CLOUD_ACCESS_SECRET。
const accessKeySecret = process.env.OSS_ACCESS_KEY_SECRET || "iaHVzf62GoM2hSOkj0WjYvImShzNbp";

// 测试路由，用于验证OSS路由模块是否正常加载
router.get('/test', (req, res) => {
    console.log('OSS测试路由被访问');
    res.json({ message: 'OSS路由模块正常工作' });
});

router.get('/api/oss/get_sts_token_for_oss_upload', (req, res) => {
    console.log('开始获取STS Token');
    console.log('使用的AccessKeyID:', config.accessKeyId ? '已配置' : '未配置');

    let sts = new STS({
        accessKeyId: config.accessKeyId,
        accessKeySecret: config.accessKeySecret,
    });
    // roleArn填写步骤2获取的角色ARN，例如acs:ram::175708322470****:role/ramtest。
    // policy填写自定义权限策略，用于进一步限制STS临时访问凭证的权限。如果不指定Policy，则返回的STS临时访问凭证默认拥有指定角色的所有权限。
    // 3000为过期时间，单位为秒。
    // sessionName用于自定义角色会话名称，用来区分不同的令牌，例如填写为sessiontest。
    console.log('准备调用assumeRole方法');
    sts.assumeRole('acs:ram::1530256558631716:role/test-upload', ``, '3000', 'sessiontest').then((result) => {
        console.log('STS Token获取成功');
        console.log(result);
        res.json({
            AccessKeyId: result.credentials.AccessKeyId,
            AccessKeySecret: result.credentials.AccessKeySecret,
            SecurityToken: result.credentials.SecurityToken,
        });
    }).catch((err) => {
        console.log('STS错误:', err);
        res.status(400).json(err.message);
    });
});

module.exports = router; 